home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Freeware / Adobe Air 1.5 / AdobeAIRInstaller.exe / setup.swf / scripts / mx / binding / BindabilityInfo.as next >
Encoding:
Text File  |  2008-10-29  |  4.0 KB  |  123 lines

  1. package mx.binding
  2. {
  3.    import mx.core.mx_internal;
  4.    import mx.events.PropertyChangeEvent;
  5.    
  6.    use namespace mx_internal;
  7.    
  8.    public class BindabilityInfo
  9.    {
  10.       mx_internal static const VERSION:String = "3.0.0.0";
  11.       
  12.       public static const BINDABLE:String = "Bindable";
  13.       
  14.       public static const MANAGED:String = "Managed";
  15.       
  16.       public static const CHANGE_EVENT:String = "ChangeEvent";
  17.       
  18.       public static const NON_COMMITTING_CHANGE_EVENT:String = "NonCommittingChangeEvent";
  19.       
  20.       public static const ACCESSOR:String = "accessor";
  21.       
  22.       public static const METHOD:String = "method";
  23.       
  24.       private var classChangeEvents:Object;
  25.       
  26.       private var typeDescription:XML;
  27.       
  28.       private var childChangeEvents:Object;
  29.       
  30.       public function BindabilityInfo(param1:XML)
  31.       {
  32.          childChangeEvents = {};
  33.          super();
  34.          this.typeDescription = param1;
  35.       }
  36.       
  37.       private function addChangeEvents(param1:XMLList, param2:Object, param3:Boolean) : void
  38.       {
  39.          var _loc4_:XML = null;
  40.          var _loc5_:XMLList = null;
  41.          var _loc6_:String = null;
  42.          for each(_loc4_ in param1)
  43.          {
  44.             _loc5_ = _loc4_.arg;
  45.             if(_loc5_.length() > 0)
  46.             {
  47.                _loc6_ = _loc5_[0].@value;
  48.                param2[_loc6_] = param3;
  49.             }
  50.             else
  51.             {
  52.                trace("warning: unconverted Bindable metadata in class \'" + typeDescription.@name + "\'");
  53.             }
  54.          }
  55.       }
  56.       
  57.       private function getClassChangeEvents() : Object
  58.       {
  59.          if(!classChangeEvents)
  60.          {
  61.             classChangeEvents = {};
  62.             addBindabilityEvents(typeDescription.metadata,classChangeEvents);
  63.             if(typeDescription.metadata.(@name == MANAGED).length() > 0)
  64.             {
  65.                classChangeEvents[PropertyChangeEvent.PROPERTY_CHANGE] = true;
  66.             }
  67.          }
  68.          return classChangeEvents;
  69.       }
  70.       
  71.       private function addBindabilityEvents(param1:XMLList, param2:Object) : void
  72.       {
  73.          var metadata:XMLList = param1;
  74.          var eventListObj:Object = param2;
  75.          addChangeEvents(metadata.(@name == BINDABLE),eventListObj,true);
  76.          addChangeEvents(metadata.(@name == CHANGE_EVENT),eventListObj,true);
  77.          addChangeEvents(metadata.(@name == NON_COMMITTING_CHANGE_EVENT),eventListObj,false);
  78.       }
  79.       
  80.       private function copyProps(param1:Object, param2:Object) : Object
  81.       {
  82.          var _loc3_:String = null;
  83.          for(_loc3_ in param1)
  84.          {
  85.             param2[_loc3_] = param1[_loc3_];
  86.          }
  87.          return param2;
  88.       }
  89.       
  90.       public function getChangeEvents(param1:String) : Object
  91.       {
  92.          var childDesc:XMLList = null;
  93.          var numChildren:int = 0;
  94.          var childName:String = param1;
  95.          var changeEvents:Object = childChangeEvents[childName];
  96.          if(!changeEvents)
  97.          {
  98.             changeEvents = copyProps(getClassChangeEvents(),{});
  99.             childDesc = typeDescription.accessor.(@name == childName) + typeDescription.method.(@name == childName);
  100.             numChildren = int(childDesc.length());
  101.             if(numChildren == 0)
  102.             {
  103.                if(!typeDescription.@dynamic)
  104.                {
  105.                   trace("warning: no describeType entry for \'" + childName + "\' on non-dynamic type \'" + typeDescription.@name + "\'");
  106.                }
  107.             }
  108.             else
  109.             {
  110.                if(numChildren > 1)
  111.                {
  112.                   trace("warning: multiple describeType entries for \'" + childName + "\' on type \'" + typeDescription.@name + "\':\n" + childDesc);
  113.                }
  114.                addBindabilityEvents(childDesc.metadata,changeEvents);
  115.             }
  116.             childChangeEvents[childName] = changeEvents;
  117.          }
  118.          return changeEvents;
  119.       }
  120.    }
  121. }
  122.  
  123.